class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        # 维护一个窗口，left-至-right，里面都是不重复元素的字符
        # 集合
        path={}
        ans=0
        left=0
        for right in range(len(s)):
            # 当前元素存在 集合中，移动左边界
            if s[right] in path and path[s[right]]>=left:
                left=path[s[right]]+1
            # 添加 右窗口
            path[s[right]]=right
            # 更新值
            ans=max(ans,right-left+1)
        return ans